package com.lanyou.esb.cook.proxy.service;

import com.lanyou.esb.cook.proxy.entity.Token;
import com.lanyou.esb.cook.proxy.exception.AuthException;

/**
 * 令牌服务接口
 * 
 * @author Davey.wu
 */
public interface TokenService {
	/**
	 * 获取令牌信息
	 * 
	 * @param systemCode
	 *            ：系统编码
	 * @param ifCode
	 *            ：接口编码
	 * @param ifVersion
	 *            ：接口版本
	 * @param callSystemCode
	 *            ：调用方系统编码
	 * @return
	 * @throws Exception
	 */
	Token getToken(String systemCode, String ifCode, String ifVersion,
			String callSystemCode) throws Exception;

	/**
	 * 根据密钥获取令牌信息
	 * 
	 * @param applyKey
	 *            ：密钥
	 * @param systemCode
	 *            ：系统编码
	 * @param ifCode
	 *            ：接口编码
	 * @param ifVersion
	 *            ：接口版本
	 * @return
	 * @throws Exception
	 */
	Token getToken4Acc(String applyKey, String systemCode, String ifCode,
			String ifVersion) throws Exception;

	/**
	 * 获取令牌信息
	 * 
	 * @param applyKey
	 *            ：密钥
	 * @param ifCode
	 *            ：接口编码
	 * @param ifVersion
	 *            ：接口版本
	 * @return
	 * @throws Exception
	 */
	Token getToken(String applyKey, String ifCode, String ifVersion)
			throws Exception;

	/**
	 * 获取测试令牌
	 * 
	 * @param systemCode
	 *            ：系统编码
	 * @param ifCode
	 *            ：接口编码
	 * @param ifVersion
	 *            ：接口版本
	 * @param callSystemCode
	 *            ：调用方系统编码
	 * @return
	 */
	Token getTestToken(String systemCode, String ifCode, String ifVersion,
			String callSystemCode);

	/**
	 * 加载所有令牌信息到REDIS
	 */
	void loadAllToRedis();

	/**
	 * 更新令牌
	 * 
	 * @param token
	 * @return
	 * @throws AuthException 
	 */
	Token updateToken(Token token) throws AuthException;

	/**
	 * 更新测试令牌
	 * 
	 * @param token
	 *            ：令牌
	 * @return
	 * @throws AuthException 
	 */
	Token updateTestToken(Token token) throws AuthException;

	/**
	 * 重新加载
	 * 
	 * @param token
	 *            ：令牌
	 * @return
	 */
	void reload(Token token);

}
